package com.hqyj.fj.javaSpringBoot.modules.common.service.lmpl;

import com.hqyj.fj.javaSpringBoot.config.ResourcesConfigerBean;
import com.hqyj.fj.javaSpringBoot.modules.common.entity.ImageType;
import com.hqyj.fj.javaSpringBoot.modules.common.entity.Result;
import com.hqyj.fj.javaSpringBoot.modules.common.service.ImageService;
import com.hqyj.fj.javaSpringBoot.util.FileUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
@Service
public class ImageServiceImpl implements ImageService {

    @Autowired
    private ResourcesConfigerBean resourcesConfigerBean;

    @Value("${artifactId}")
    private  String artifactId;

    @Override
    public Result<String> uploadImag(MultipartFile file, String imageType) {

        //判断文件是否为空
        if(file.isEmpty()){
            return  new Result<>(Result.ResultCode.FAILED.code,"Image is null");
        }
        //判断文件是否是图片
        if(!FileUtil.isImage(file)){
            return  new Result<>(Result.ResultCode.FAILED.code,"Image is no image");
        }
        //获取图片类型的相关信息 ,获取图片枚举对象
        ImageType imageTypeMenu= ImageType.getImageTypeName(imageType);
        //构建目标对象绝对地址-----d:/upload + artifactId + imageType +图片名字
        String imageName = String.format("%s.%s", System.currentTimeMillis(),
                FileUtil.getFileType(file.getOriginalFilename()));
        String destFolder = String.format("%s%s/%s",System.getProperty("os.name").toLowerCase().startsWith("win")?
                resourcesConfigerBean.getWindowsLocation():resourcesConfigerBean.getLinuxLocation(),artifactId,imageType);
        File destFolderFile = new File(destFolder);
        if (!destFolderFile.exists()) {
            destFolderFile.mkdirs();
        }
        String absolutePath = String.format("%s/%s",
                destFolder,
                imageName);
        //构建目标对象的相对地址-------/upload + artifactId + imageType +图片名字
        String relatePath = String.format("%s%s/%s/%s",
                resourcesConfigerBean.getPath(),
                artifactId,
                imageType,
                imageName);

        try{
            //        写图片到目标对象
            File destFile = new File(absolutePath) ;
            file.transferTo(destFile);

//        变更图片的尺寸----可选
            FileUtil.changeImageSize(absolutePath,absolutePath,imageTypeMenu.length,imageTypeMenu.height);
//        返回result对象
            return new Result<>(Result.ResultCode.SUCCESS.code,
                    "Upload image success.", relatePath);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}
